/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vista.abms;

import controlador.utiles.gestorGeoLocalicacion;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import modelo.Barrio;
import modelo.Localidad;
import modelo.Pais;
import modelo.Provincia;
import util.ComboUtil;
import util.HibernateUtil;
import util.Tupla;
import vista.interfaces.ICallBack;
import vista.interfaces.ICallBack_v2;

/**
 *
 * @author Emmanuel
 */
public class ABMDomicilio extends javax.swing.JInternalFrame {

    private static final String SELECCIONE_PAIS = "Seleccione un país...";
    private static final String SELECCIONE_PROVINCIA = "Seleccione una provincia...";
    private static final String SELECCIONE_LOCALIDAD = "Seleccione una localidad...";
    private static final String SELECCIONE_BARRIO = "Seleccione un barrio...";
    private static final String NUEVO_PAIS = "<Nuevo País>";
    private static final String NUEVA_PROVINCIA = "<Nueva Provincia>";
    private static final String NUEVA_LOCALIDAD = "<Nueva Localidad>";
    private static final String NUEVO_BARRIO = "<Nuevo Barrio>";
    
    private ICallBack_v2 callback;
    
    /**
     * Creates new form ABMDomicilio
     */
    public ABMDomicilio() {
        initComponents();
        llenarComboPais();
        callback = null;
    }
    
    /**
     * Constructor que permite abrir la ventana de ABMDomicilio con los combos
     * seleccionados de acuerdo al id de la entidad padre a la que se le desee
     * agregar una hija, junto con la clase de la hija. Ejemplo;
     *  - Si deseo agregar un nuevo barrio a una localidad, debo enviar el id
     *    de la localidad y la clase barrio (Barrio.class).
     * @param id id de la entidad padre
     * @param entidad clase de la entidad hija
     */
    public ABMDomicilio(ICallBack_v2 callback, int id, Class entidad)
    {
        this();
        this.callback = callback;
        gestorGeoLocalicacion geo = new gestorGeoLocalicacion();
        if(entidad.getName().equals(Barrio.class.getName()))
        {
            Localidad l = geo.getLocalidad(id);
            Provincia pr = geo.getProvinciaDeLocalidad(l.getId());
            Pais pa = geo.getPaisDeProvincia(pr.getId());
            ComboUtil.seleccionarEnCombo(cmbPais, pa.getId());
            ComboUtil.seleccionarEnCombo(cmbProvincia, pr.getId());
            ComboUtil.seleccionarEnCombo(cmbLocalidad, l.getId());
        }else if(entidad.getName().equals(Localidad.class.getName()))
        {
            Provincia pr = geo.getProvincia(id);
            Pais pa = geo.getPaisDeProvincia(pr.getId());
            ComboUtil.seleccionarEnCombo(cmbPais, pa.getId());
            ComboUtil.seleccionarEnCombo(cmbProvincia, pr.getId());
        }else if(entidad.getName().equals(Provincia.class.getName()))
        {
            Pais pa = geo.getPais(id);
            ComboUtil.seleccionarEnCombo(cmbPais, pa.getId());
        }
    }


    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jComboBox1 = new javax.swing.JComboBox();
        jPanel2 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jPanel3 = new javax.swing.JPanel();
        cmbProvincia = new javax.swing.JComboBox();
        btnEditarProvincia = new javax.swing.JButton();
        btnEliminarProvincia = new javax.swing.JButton();
        jPanel4 = new javax.swing.JPanel();
        cmbPais = new javax.swing.JComboBox();
        btnEditarPais = new javax.swing.JButton();
        btnEliminarPais = new javax.swing.JButton();
        jPanel5 = new javax.swing.JPanel();
        cmbLocalidad = new javax.swing.JComboBox();
        btnEditarLocalidad = new javax.swing.JButton();
        btnEliminarLocalidad = new javax.swing.JButton();
        jPanel6 = new javax.swing.JPanel();
        cmbBarrio = new javax.swing.JComboBox();
        btnEditarBarrio = new javax.swing.JButton();
        btnEliminarBarrio = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();

        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        setTitle("Administración de Domicilio");

        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(""));

        jLabel1.setText("La consola de administración de domicilio le permitirá agregar, modificar");

        jLabel2.setText("e incluso eliminar paises, provincias, localidades y barrios. Los botones");

        jLabel3.setText("al lado de cada combo le brindarán estas funcionalidades. Si desea");

        jLabel4.setText("agregar un elemento nuevo, seleccione el item <Nuevo XXXX>.");

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel1))
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 337, Short.MAX_VALUE)
                            .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel4)
                .addContainerGap(15, Short.MAX_VALUE))
        );

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Provincia"));

        cmbProvincia.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbProvinciaActionPerformed(evt);
            }
        });

        btnEditarProvincia.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/var/16x16/Modify.png"))); // NOI18N
        btnEditarProvincia.setEnabled(false);
        btnEditarProvincia.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditarProvinciaActionPerformed(evt);
            }
        });

        btnEliminarProvincia.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/var/16x16/delete.png"))); // NOI18N
        btnEliminarProvincia.setEnabled(false);
        btnEliminarProvincia.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarProvinciaActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(cmbProvincia, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnEditarProvincia, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnEliminarProvincia, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, 0))
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(cmbProvincia, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnEditarProvincia, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnEliminarProvincia, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("País"));

        cmbPais.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbPaisActionPerformed(evt);
            }
        });

        btnEditarPais.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/var/16x16/Modify.png"))); // NOI18N
        btnEditarPais.setEnabled(false);
        btnEditarPais.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditarPaisActionPerformed(evt);
            }
        });

        btnEliminarPais.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/var/16x16/delete.png"))); // NOI18N
        btnEliminarPais.setEnabled(false);
        btnEliminarPais.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarPaisActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(cmbPais, javax.swing.GroupLayout.PREFERRED_SIZE, 266, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnEditarPais, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnEliminarPais, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(cmbPais, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnEditarPais, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnEliminarPais, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder("Localidad"));

        cmbLocalidad.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbLocalidadActionPerformed(evt);
            }
        });

        btnEditarLocalidad.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/var/16x16/Modify.png"))); // NOI18N
        btnEditarLocalidad.setEnabled(false);
        btnEditarLocalidad.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditarLocalidadActionPerformed(evt);
            }
        });

        btnEliminarLocalidad.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/var/16x16/delete.png"))); // NOI18N
        btnEliminarLocalidad.setEnabled(false);
        btnEliminarLocalidad.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarLocalidadActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(cmbLocalidad, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnEditarLocalidad, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnEliminarLocalidad, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, 0))
        );
        jPanel5Layout.setVerticalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(cmbLocalidad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnEditarLocalidad, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnEliminarLocalidad, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jPanel6.setBorder(javax.swing.BorderFactory.createTitledBorder("Barrio"));

        cmbBarrio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbBarrioActionPerformed(evt);
            }
        });

        btnEditarBarrio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/var/16x16/Modify.png"))); // NOI18N
        btnEditarBarrio.setEnabled(false);
        btnEditarBarrio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditarBarrioActionPerformed(evt);
            }
        });

        btnEliminarBarrio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/var/16x16/delete.png"))); // NOI18N
        btnEliminarBarrio.setEnabled(false);
        btnEliminarBarrio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarBarrioActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(cmbBarrio, 0, 268, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnEditarBarrio, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnEliminarBarrio, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, 0))
        );
        jPanel6Layout.setVerticalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(cmbBarrio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnEditarBarrio, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnEliminarBarrio, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/iconos/var/16x16/block.png"))); // NOI18N
        jButton1.setText("Salir");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(0, 0, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(jPanel5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jPanel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 362, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(jButton1)
                        .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton1)
                .addContainerGap(19, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnEditarProvinciaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarProvinciaActionPerformed
        Tupla t = (Tupla) cmbProvincia.getSelectedItem();
        if(cmbProvincia.getSelectedIndex() >= 0 && t!= null && !t.getNombre().equals(ABMDomicilio.SELECCIONE_PROVINCIA))
        {
            if(!t.getNombre().equals(ABMDomicilio.NUEVA_PROVINCIA))
            {
                String nombreProvinciaEditada = JOptionPane.showInternalInputDialog(this,"Ingrese el nuevo nombre: ", "Cambiar nombre a "+t.getNombre(),JOptionPane.OK_CANCEL_OPTION);
                if(nombreProvinciaEditada!= null && !nombreProvinciaEditada.equals(""))
                {
                    try {
                        HibernateUtil.beginTransaction();
                        Provincia provinciaEditada = (Provincia) HibernateUtil.getSession().get(Provincia.class, t.getId());
                        provinciaEditada.setNombre(nombreProvinciaEditada);
                        HibernateUtil.getSession().update(provinciaEditada);
                        HibernateUtil.commitTransaction();
                        Tupla tPais = (Tupla) cmbPais.getSelectedItem();
                        llenarComboProvincia(tPais.getId());
                    } catch (Exception ex) {
                        HibernateUtil.rollbackTransaction();
                        JOptionPane.showMessageDialog(this, "<html><body>No se pudo modificar la provincia.<br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
            }
        }
    }//GEN-LAST:event_btnEditarProvinciaActionPerformed

    private void btnEditarPaisActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarPaisActionPerformed
        Tupla t = (Tupla) cmbPais.getSelectedItem();
        if(cmbPais.getSelectedIndex() >= 0 && t!= null && !t.getNombre().equals(ABMDomicilio.SELECCIONE_PAIS))
        {
            if(!t.getNombre().equals(ABMDomicilio.NUEVO_PAIS))
            {
                String nombrePaisEditado = JOptionPane.showInternalInputDialog(this,"Ingrese el nuevo nombre: ", "Cambiar nombre a "+t.getNombre(),JOptionPane.OK_CANCEL_OPTION);
                if(nombrePaisEditado!= null && !nombrePaisEditado.equals(""))
                {
                    try {
                        HibernateUtil.beginTransaction();
                        Pais paisEditado = (Pais) HibernateUtil.getSession().get(Pais.class, t.getId());
                        paisEditado.setNombre(nombrePaisEditado);
                        HibernateUtil.getSession().update(paisEditado);
                        HibernateUtil.commitTransaction();
                        llenarComboPais();
                    } catch (Exception ex) {
                        HibernateUtil.rollbackTransaction();
                        JOptionPane.showMessageDialog(this, "<html><body>No se pudo modificar el país.<br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
                
            }
        }
    }//GEN-LAST:event_btnEditarPaisActionPerformed

    private void btnEditarLocalidadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarLocalidadActionPerformed
        Tupla t = (Tupla) cmbLocalidad.getSelectedItem();
        if(cmbLocalidad.getSelectedIndex() >= 0 && t!= null && !t.getNombre().equals(ABMDomicilio.SELECCIONE_LOCALIDAD))
        {
            if(!t.getNombre().equals(ABMDomicilio.NUEVA_LOCALIDAD))
            {
                String nombreLocalidadEditada = JOptionPane.showInternalInputDialog(this,"Ingrese el nuevo nombre: ", "Cambiar nombre a "+t.getNombre(),JOptionPane.OK_CANCEL_OPTION);
                if(nombreLocalidadEditada!= null && !nombreLocalidadEditada.equals(""))
                {
                    try {
                        HibernateUtil.beginTransaction();
                        Localidad localidadEditada = (Localidad) HibernateUtil.getSession().get(Localidad.class, t.getId());
                        localidadEditada.setNombre(nombreLocalidadEditada);
                        HibernateUtil.getSession().update(localidadEditada);
                        HibernateUtil.commitTransaction();
                        Tupla tProvincia = (Tupla) cmbProvincia.getSelectedItem();
                        llenarComboLocalidad(tProvincia.getId());
                    } catch (Exception ex) {
                        HibernateUtil.rollbackTransaction();
                        JOptionPane.showMessageDialog(this, "<html><body>No se pudo modificar la localidad.<br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
            }
        }
    }//GEN-LAST:event_btnEditarLocalidadActionPerformed

    private void btnEditarBarrioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarBarrioActionPerformed
        Tupla t = (Tupla) cmbBarrio.getSelectedItem();
        if(cmbBarrio.getSelectedIndex() >= 0 && t!= null && !t.getNombre().equals(ABMDomicilio.SELECCIONE_BARRIO))
        {
            if(!t.getNombre().equals(ABMDomicilio.NUEVO_BARRIO))
            {
                String nombreBarrioEditado = JOptionPane.showInternalInputDialog(this,"Ingrese el nuevo nombre: ", "Cambiar nombre a "+t.getNombre(),JOptionPane.OK_CANCEL_OPTION);
                if(nombreBarrioEditado!= null && !nombreBarrioEditado.equals(""))
                {
                    try {
                        HibernateUtil.beginTransaction();
                        Barrio barrioEditado = (Barrio) HibernateUtil.getSession().get(Barrio.class, t.getId());
                        barrioEditado.setNombre(nombreBarrioEditado);
                        HibernateUtil.getSession().update(barrioEditado);
                        HibernateUtil.commitTransaction();
                        Tupla tLocalidad = (Tupla) cmbLocalidad.getSelectedItem();
                        llenarComboBarrio(tLocalidad.getId());
                    } catch (Exception ex) {
                        HibernateUtil.rollbackTransaction();
                        JOptionPane.showMessageDialog(this, "<html><body>No se pudo modificar el país.<br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
            }
        }
    }//GEN-LAST:event_btnEditarBarrioActionPerformed

    private void cmbPaisActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbPaisActionPerformed
        habilitarCombos(true, false, false, false);
        limpiarCombos(false,true,true,true);
        habilitarEdicion(false, false, false, false);
        Tupla t = (Tupla) cmbPais.getSelectedItem();
        if(cmbPais.getSelectedIndex() >= 0 && t!= null && !t.getNombre().equals(ABMDomicilio.SELECCIONE_PAIS))
        {
            if(t.getNombre().equals(ABMDomicilio.NUEVO_PAIS))
            {
                String nombreNuevoPais = JOptionPane.showInternalInputDialog(this,"Ingrese el nombre: ", "Nuevo País",JOptionPane.OK_CANCEL_OPTION);
                if(nombreNuevoPais!= null && !nombreNuevoPais.equals(""))
                {
                    Pais nuevoPais = new Pais();
                    nuevoPais.setNombre(nombreNuevoPais);
                    try {
                        HibernateUtil.beginTransaction();
                        HibernateUtil.getSession().save(nuevoPais);
                        HibernateUtil.commitTransaction();
                    } catch (Exception ex) {
                        HibernateUtil.rollbackTransaction();
                        JOptionPane.showMessageDialog(this, "<html><body>No se pudo cargar el nuevo país.<br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
                llenarComboPais();
            }
            else
            {
                this.llenarComboProvincia(t.getId());
            }
        }
    }//GEN-LAST:event_cmbPaisActionPerformed

    private void cmbProvinciaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbProvinciaActionPerformed
        habilitarCombos(true, true, false, false);
        limpiarCombos(false,false,true,true);
        habilitarEdicion(true, false, false, false);
        Tupla t = (Tupla) cmbProvincia.getSelectedItem();
        Tupla tPais = (Tupla) cmbPais.getSelectedItem();
        if(cmbProvincia.getSelectedIndex() >= 0 && t!= null && !t.getNombre().equals(ABMDomicilio.SELECCIONE_PROVINCIA))
        {
            if(t.getNombre().equals(ABMDomicilio.NUEVA_PROVINCIA))
            {
                String nombreNuevaProvincia = JOptionPane.showInternalInputDialog(this,"Ingrese el nombre: ", "Nueva Provincia",JOptionPane.OK_CANCEL_OPTION);
                if(nombreNuevaProvincia!= null && !nombreNuevaProvincia.equals(""))
                {
                    try {
                        HibernateUtil.beginTransaction();
                        Provincia nuevaProvincia = new Provincia();
                        nuevaProvincia.setNombre(nombreNuevaProvincia);
                        Pais pais = (Pais) HibernateUtil.getSession().get(Pais.class, tPais.getId());
                        pais.getProvincias().add(nuevaProvincia);
                        HibernateUtil.getSession().save(nuevaProvincia);
                        HibernateUtil.getSession().update(pais);
                        HibernateUtil.commitTransaction();
                    } catch (Exception ex) {
                        HibernateUtil.rollbackTransaction();
                        JOptionPane.showMessageDialog(this, "<html><body>No se pudo cargar la nueva provincia.<br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
                llenarComboProvincia(tPais.getId());
            }
            else
            {
                this.llenarComboLocalidad(t.getId());
            }
        }
    }//GEN-LAST:event_cmbProvinciaActionPerformed

    private void cmbLocalidadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbLocalidadActionPerformed
        habilitarCombos(true, true, true, false);
        limpiarCombos(false,false,false,true);
        habilitarEdicion(true, true, false, false);
        Tupla t = (Tupla) cmbLocalidad.getSelectedItem();
        Tupla tProvincia = (Tupla) cmbProvincia.getSelectedItem();
        if(cmbLocalidad.getSelectedIndex() >= 0 && t!= null && !t.getNombre().equals(ABMDomicilio.SELECCIONE_LOCALIDAD))
        {
            if(t.getNombre().equals(ABMDomicilio.NUEVA_LOCALIDAD))
            {
                String nombreNuevaLocalidad = JOptionPane.showInternalInputDialog(this,"Ingrese el nombre: ", "Nueva Provincia",JOptionPane.OK_CANCEL_OPTION);
                if(nombreNuevaLocalidad!= null && !nombreNuevaLocalidad.equals(""))
                {
                    try {
                        HibernateUtil.beginTransaction();
                        Localidad nuevaLocalidad = new Localidad();
                        nuevaLocalidad.setNombre(nombreNuevaLocalidad);
                        Provincia provincia = (Provincia) HibernateUtil.getSession().get(Provincia.class, tProvincia.getId());
                        provincia.getLocalidades().add(nuevaLocalidad);
                        HibernateUtil.getSession().save(nuevaLocalidad);
                        HibernateUtil.getSession().update(provincia);
                        HibernateUtil.commitTransaction();
                    } catch (Exception ex) {
                        HibernateUtil.rollbackTransaction();
                        JOptionPane.showMessageDialog(this, "<html><body>No se pudo cargar la nueva localidad.<br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
                llenarComboLocalidad(tProvincia.getId());
            }
            else
            {
                this.llenarComboBarrio(t.getId());
            }
        }
    }//GEN-LAST:event_cmbLocalidadActionPerformed

    private void cmbBarrioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbBarrioActionPerformed
        habilitarEdicion(true, true, true, false);
        Tupla t = (Tupla) cmbBarrio.getSelectedItem();
        Tupla tLocalidad = (Tupla) cmbLocalidad.getSelectedItem();
        if(cmbBarrio.getSelectedIndex() >= 0 && t!= null && !t.getNombre().equals(ABMDomicilio.SELECCIONE_BARRIO))
        {
            if(t.getNombre().equals(ABMDomicilio.NUEVO_BARRIO))
            {
                String nombreNuevoBarrio = JOptionPane.showInternalInputDialog(this,"Ingrese el nombre: ", "Nueva Provincia",JOptionPane.OK_CANCEL_OPTION);
                if(nombreNuevoBarrio!= null && !nombreNuevoBarrio.equals(""))
                {
                    try {
                        HibernateUtil.beginTransaction();
                        Barrio nuevoBarrio = new Barrio();
                        nuevoBarrio.setNombre(nombreNuevoBarrio);
                        Localidad localidad = (Localidad) HibernateUtil.getSession().get(Localidad.class, tLocalidad.getId());
                        localidad.getBarrios().add(nuevoBarrio);
                        HibernateUtil.getSession().save(nuevoBarrio);
                        HibernateUtil.getSession().update(localidad);
                        HibernateUtil.commitTransaction();
                    } catch (Exception ex) {
                        HibernateUtil.rollbackTransaction();
                        JOptionPane.showMessageDialog(this, "<html><body>No se pudo cargar el nuevo barrio.<br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
                llenarComboBarrio(tLocalidad.getId());
            }
            else
            {
                btnEditarBarrio.setEnabled(true);
                btnEliminarBarrio.setEnabled(true);
            }
        }
    }//GEN-LAST:event_cmbBarrioActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        if(callback != null)
        {
            callback.actualizar(0,"", true);
        }
        this.dispose();
    }//GEN-LAST:event_jButton1ActionPerformed

    private void btnEliminarPaisActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarPaisActionPerformed
        Tupla t = (Tupla) cmbPais.getSelectedItem();
        if(cmbPais.getSelectedIndex() >= 0 && t!= null && !t.getNombre().equals(ABMDomicilio.SELECCIONE_PAIS))
        {
            if(!gestorGeoLocalicacion.verificarExistenciaPaisEnDomicilios(t.getId()))
            {
                try {
                    HibernateUtil.beginTransaction();
                    Pais pais = (Pais) HibernateUtil.getSession().get(Pais.class,t.getId());
                    HibernateUtil.getSession().delete(pais);
                    HibernateUtil.commitTransaction();
                    llenarComboPais();
                } catch (Exception ex) {
                    HibernateUtil.rollbackTransaction();
                    JOptionPane.showMessageDialog(this, "<html><body>No se pudo borrar el país seleccionado.<br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
            else
            {
                JOptionPane.showMessageDialog(this, "<html><body>No se pudo borrar el pais seleccionado<br>ya que está siendo utilizado.", "Error", JOptionPane.ERROR_MESSAGE);
            }
        } 
    }//GEN-LAST:event_btnEliminarPaisActionPerformed

    private void btnEliminarProvinciaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarProvinciaActionPerformed
        Tupla t = (Tupla) cmbProvincia.getSelectedItem();
        Tupla tPais = (Tupla) cmbPais.getSelectedItem();
        if(cmbProvincia.getSelectedIndex() >= 0 && t!= null && !t.getNombre().equals(ABMDomicilio.SELECCIONE_PROVINCIA))
        {
            if(!gestorGeoLocalicacion.verificarExistenciaProvinciaEnDomicilios(t.getId()))
            {
                try {
                    HibernateUtil.beginTransaction();
                    Provincia provincia = (Provincia) HibernateUtil.getSession().get(Provincia.class,t.getId());
                    Pais pais = (Pais) HibernateUtil.getSession().get(Pais.class,tPais.getId());
                    pais.getProvincias().remove(provincia);
                    HibernateUtil.getSession().update(pais);
                    HibernateUtil.getSession().delete(provincia);
                    HibernateUtil.commitTransaction();
                    llenarComboProvincia(tPais.getId());
                } catch (Exception ex) {
                    HibernateUtil.rollbackTransaction();
                    JOptionPane.showMessageDialog(this, "<html><body>No se pudo borrar la provincia seleccionada.<br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
            else
            {
                JOptionPane.showMessageDialog(this, "<html><body>No se pudo borrar la provincia seleccionada<br>ya que está siendo utilizada.", "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }//GEN-LAST:event_btnEliminarProvinciaActionPerformed

    private void btnEliminarLocalidadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarLocalidadActionPerformed
        Tupla t = (Tupla) cmbLocalidad.getSelectedItem();
        Tupla tProvincia = (Tupla) cmbProvincia.getSelectedItem();
        if(cmbLocalidad.getSelectedIndex() >= 0 && t!= null && !t.getNombre().equals(ABMDomicilio.SELECCIONE_LOCALIDAD))
        {
            if(!gestorGeoLocalicacion.verificarExistenciaLocalidadEnDomicilios(t.getId()))
            {
                try {
                    HibernateUtil.beginTransaction();
                    Localidad localidad = (Localidad) HibernateUtil.getSession().get(Localidad.class,t.getId());
                    Provincia provincia = (Provincia) HibernateUtil.getSession().get(Provincia.class,tProvincia.getId());
                    provincia.getLocalidades().remove(localidad);
                    HibernateUtil.getSession().update(provincia);
                    HibernateUtil.getSession().delete(localidad);
                    HibernateUtil.commitTransaction();
                    llenarComboLocalidad(tProvincia.getId());
                } catch (Exception ex) {
                    HibernateUtil.rollbackTransaction();
                    JOptionPane.showMessageDialog(this, "<html><body>No se pudo borrar la localidad seleccionada.<br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
            else
            {
                JOptionPane.showMessageDialog(this, "<html><body>No se pudo borrar la localidad seleccionado<br>ya que está siendo utilizada.", "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }//GEN-LAST:event_btnEliminarLocalidadActionPerformed

    private void btnEliminarBarrioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarBarrioActionPerformed
        Tupla t = (Tupla) cmbBarrio.getSelectedItem();
        Tupla tLocalidad = (Tupla) cmbLocalidad.getSelectedItem();
        if(cmbLocalidad.getSelectedIndex() >= 0 && t!= null && !t.getNombre().equals(ABMDomicilio.SELECCIONE_BARRIO))
        {
            if(!gestorGeoLocalicacion.verificarExistenciaBarrioEnDomicilios(t.getId()))
            {
                try {
                    HibernateUtil.beginTransaction();
                    Barrio barrio = (Barrio) HibernateUtil.getSession().get(Barrio.class,t.getId());
                    Localidad localidad = (Localidad) HibernateUtil.getSession().get(Localidad.class, tLocalidad.getId());
                    localidad.getBarrios().remove(barrio);
                    HibernateUtil.getSession().update(localidad);
                    HibernateUtil.getSession().delete(barrio);
                    HibernateUtil.commitTransaction();
                    llenarComboBarrio(tLocalidad.getId());
                } catch (Exception ex) {
                    HibernateUtil.rollbackTransaction();
                    JOptionPane.showMessageDialog(this, "<html><body>No se pudo borrar el barrio seleccionado.<br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
            else
            {
                JOptionPane.showMessageDialog(this, "<html><body>No se pudo borrar el barrio seleccionado<br>ya que está siendo utilizado.", "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }//GEN-LAST:event_btnEliminarBarrioActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnEditarBarrio;
    private javax.swing.JButton btnEditarLocalidad;
    private javax.swing.JButton btnEditarPais;
    private javax.swing.JButton btnEditarProvincia;
    private javax.swing.JButton btnEliminarBarrio;
    private javax.swing.JButton btnEliminarLocalidad;
    private javax.swing.JButton btnEliminarPais;
    private javax.swing.JButton btnEliminarProvincia;
    private javax.swing.JComboBox cmbBarrio;
    private javax.swing.JComboBox cmbLocalidad;
    private javax.swing.JComboBox cmbPais;
    private javax.swing.JComboBox cmbProvincia;
    private javax.swing.JButton jButton1;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    // End of variables declaration//GEN-END:variables

    private void llenarComboPais()
    {
        try {
            cmbPais.removeAllItems();
            cmbPais.setEnabled(true);
            HibernateUtil.beginTransaction();
            List lista = HibernateUtil.getSession().createQuery("from Pais").list();
            cmbPais.addItem(new Tupla(0,ABMDomicilio.SELECCIONE_PAIS));
            cmbPais.addItem(new Tupla(0,ABMDomicilio.NUEVO_PAIS));
            for(int i = 0; i<lista.size(); i++)
            {
                Pais pais = (Pais) lista.get(i);
                Tupla t = new Tupla();
                t.setId(pais.getId());
                t.setNombre(pais.getNombre());
                cmbPais.addItem(t);
            }
            habilitarEdicion(false, false, false, false);
            cmbProvincia.removeAllItems();
            cmbProvincia.setEnabled(false);
            cmbLocalidad.removeAllItems();
            cmbLocalidad.setEnabled(false);
            cmbBarrio.removeAllItems();
            cmbBarrio.setEnabled(false);
            HibernateUtil.commitTransaction();
        } catch (Exception ex) {
            HibernateUtil.rollbackTransaction();
            JOptionPane.showMessageDialog(this, "<html><body>No se pudo cargar la lista de paises. <br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    private void llenarComboProvincia(int idPais)
    {
        try 
        {
            cmbProvincia.removeAllItems();
            cmbProvincia.setEnabled(true);
            Pais pais = (Pais) HibernateUtil.getSession().get(Pais.class, idPais);
            gestorGeoLocalicacion geo = new gestorGeoLocalicacion();
            List<Tupla> lista = geo.getProvincias(pais);
            cmbProvincia.addItem(new Tupla(0,ABMDomicilio.SELECCIONE_PROVINCIA));
            cmbProvincia.addItem(new Tupla(0,ABMDomicilio.NUEVA_PROVINCIA));
            for(int i = 0; i<lista.size(); i++)
            {
                Tupla t = lista.get(i);
                cmbProvincia.addItem(t);
            }
            habilitarEdicion(true, false, false, false);
            cmbLocalidad.removeAllItems();
            cmbLocalidad.setEnabled(false);
            cmbBarrio.removeAllItems();
            cmbBarrio.setEnabled(false);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, "<html><body>No se pudo cargar la lista de provincias. <br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    private void llenarComboLocalidad(int idProvincia)
    {
        try 
        {
            cmbLocalidad.removeAllItems();
            cmbLocalidad.setEnabled(true);
            Provincia provincia = (Provincia) HibernateUtil.getSession().get(Provincia.class, idProvincia);
            gestorGeoLocalicacion geo = new gestorGeoLocalicacion();
            List<Tupla> lista = geo.getLocalidades(provincia);
            cmbLocalidad.addItem(new Tupla(0,ABMDomicilio.SELECCIONE_LOCALIDAD));
            cmbLocalidad.addItem(new Tupla(0,ABMDomicilio.NUEVA_LOCALIDAD));
            for(int i = 0; i<lista.size(); i++)
            {
                Tupla t = lista.get(i);
                cmbLocalidad.addItem(t);
            }
            habilitarEdicion(true, true, false, false);
            cmbBarrio.removeAllItems();
            cmbBarrio.setEnabled(false);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, "<html><body>No se pudo cargar la lista de localidades. <br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    private void llenarComboBarrio(int idLocalidad)
    {
        try {
            cmbBarrio.removeAllItems();
            cmbBarrio.setEnabled(true);
            Localidad localidad = (Localidad) HibernateUtil.getSession().get(Localidad.class, idLocalidad);
            gestorGeoLocalicacion geo = new gestorGeoLocalicacion();
            List<Tupla> lista = geo.getBarrios(localidad);
            cmbBarrio.addItem(new Tupla(0,ABMDomicilio.SELECCIONE_BARRIO));
            cmbBarrio.addItem(new Tupla(0,ABMDomicilio.NUEVO_BARRIO));
            for(int i = 0; i<lista.size(); i++)
            {
                Tupla t = lista.get(i);
                cmbBarrio.addItem(t);
            }
            habilitarEdicion(true, true, true, false);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, "<html><body>No se pudo cargar la lista de barrios. <br>Consulte al administrador", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    private void habilitarEdicion(boolean edicionPais, boolean edicionProvincia, boolean edicionLocalidad, boolean edicionBarrio)
    {
            
            btnEditarPais.setEnabled(edicionPais);
            btnEliminarPais.setEnabled(edicionPais);
            btnEditarProvincia.setEnabled(edicionProvincia);
            btnEliminarProvincia.setEnabled(edicionProvincia);
            btnEditarLocalidad.setEnabled(edicionLocalidad);
            btnEliminarLocalidad.setEnabled(edicionLocalidad);
            btnEditarBarrio.setEnabled(edicionBarrio);
            btnEliminarBarrio.setEnabled(edicionBarrio);
    }
    
    private void habilitarCombos(boolean comboPais, boolean comboProvincia, boolean comboLocalidad, boolean comboBarrio)
    {
        cmbPais.setEnabled(comboPais);
        cmbProvincia.setEnabled(comboProvincia);
        cmbLocalidad.setEnabled(comboLocalidad);
        cmbBarrio.setEnabled(comboBarrio);
    }
    
    private void limpiarCombos(boolean comboPais, boolean comboProvincia, boolean comboLocalidad, boolean comboBarrio)
    {
        if(comboPais) cmbPais.removeAllItems();
        if(comboProvincia) cmbProvincia.removeAllItems();
        if(comboLocalidad) cmbLocalidad.removeAllItems();
        if(comboBarrio) cmbBarrio.removeAllItems();
    }
}
